import asyncio


class Message:  # 实现网络消息处理
    class Connect:  # 网络连接管理
        def build(self):  # 建立网络连接
            print(f"【网络管理】与消息服务器建立网络连接。")

        def close(self):  # 关闭网络连接
            print(f"【网络管理】关闭消息服务器网络连接。")

    def __init__(self):
        self._result = 'Nothing'  # 默认的结果
        self._connect = Message.Connect()  # 网络连接管理

    async def __aenter__(self):  # 进入上下文
        self._connect.build()  # 建立网络连接
        return self

    async def __aexit__(self, exc_type, exc_val, exc_tb):  # 退出上下文
        print(self._result)  # 输出执行结果
        self._connect.close()  # 关闭网络连接

    async def message_handler(self, task):  # 消息处理
        # 网络消息一定会有延迟，因此可能不是立即完成的
        while not task.done():  # 任务没有完成
            await asyncio.sleep(1)
        else:  # while 不满足条件的时候执行
            self._result = task.result()  # 获取任务执行结果


async def message_echo(message):  # 任务处理函数
    await asyncio.sleep(2)  # 延迟2秒
    return f"【ECHO】{message}"


async def main():  # 主函数
    async with Message() as msg:  # 异步上下文
        task = asyncio.create_task(message_echo('韩朵朵，Python开发实战'))
        await msg.message_handler(task)


if __name__ == '__main__':
    asyncio.run(main())
